1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */ 
28 
29 module derelict.glib.giochannel;
30 
31 import derelict.glib.gtypes;
32 import derelict.glib.glibconfig;
33 import derelict.glib.gstring;
34 import derelict.glib.gerror;
35 import derelict.glib.gquark;
36 import derelict.glib.gunicode;
37 import derelict.glib.gmain;
38 import derelict.glib.gconvert;
39 import derelict.glib.gpoll;
40 import core.stdc.config;
41 import core.stdc.string;
42 
43 extern (C):
44 
45 alias _GIOChannel GIOChannel;
46 alias _GIOFuncs GIOFuncs;
47 alias _Anonymous_0 GIOError;
48 alias _Anonymous_1 GIOChannelError;
49 alias _Anonymous_2 GIOStatus;
50 alias _Anonymous_3 GSeekType;
51 alias _Anonymous_4 GIOCondition;
52 alias _Anonymous_5 GIOFlags;
53 alias int function (_GIOChannel*, _Anonymous_4, void*) GIOFunc;
54 
55 version(Derelict_Link_Static)
56 {
57     //extern( C ) __gshared
58     //{
59     //    shared GSourceFuncs g_io_watch_funcs;
60     //}
61 }
62 else
63 {
64 	extern( C ) nothrow 
65 	{
66 	    alias da_g_io_watch_funcs = GSourceFuncs;
67 	}
68 
69 	__gshared
70 	{
71 	    da_g_io_watch_funcs g_io_watch_funcs;
72 	}
73 }
74 
75 
76 enum _Anonymous_0
77 {
78 	G_IO_ERROR_NONE = 0,
79 	G_IO_ERROR_AGAIN = 1,
80 	G_IO_ERROR_INVAL = 2,
81 	G_IO_ERROR_UNKNOWN = 3
82 }
83 
84 enum _Anonymous_1
85 {
86 	G_IO_CHANNEL_ERROR_FBIG = 0,
87 	G_IO_CHANNEL_ERROR_INVAL = 1,
88 	G_IO_CHANNEL_ERROR_IO = 2,
89 	G_IO_CHANNEL_ERROR_ISDIR = 3,
90 	G_IO_CHANNEL_ERROR_NOSPC = 4,
91 	G_IO_CHANNEL_ERROR_NXIO = 5,
92 	G_IO_CHANNEL_ERROR_OVERFLOW = 6,
93 	G_IO_CHANNEL_ERROR_PIPE = 7,
94 	G_IO_CHANNEL_ERROR_FAILED = 8
95 }
96 
97 enum _Anonymous_2
98 {
99 	G_IO_STATUS_ERROR = 0,
100 	G_IO_STATUS_NORMAL = 1,
101 	G_IO_STATUS_EOF = 2,
102 	G_IO_STATUS_AGAIN = 3
103 }
104 
105 enum _Anonymous_3
106 {
107 	G_SEEK_CUR = 0,
108 	G_SEEK_SET = 1,
109 	G_SEEK_END = 2
110 }
111 
112 enum _Anonymous_4
113 {
114 	G_IO_IN = 1,
115 	G_IO_OUT = 4,
116 	G_IO_PRI = 2,
117 	G_IO_ERR = 8,
118 	G_IO_HUP = 16,
119 	G_IO_NVAL = 32
120 }
121 
122 enum _Anonymous_5
123 {
124 	G_IO_FLAG_APPEND = 1,
125 	G_IO_FLAG_NONBLOCK = 2,
126 	G_IO_FLAG_IS_READABLE = 4,
127 	G_IO_FLAG_IS_WRITABLE = 8,
128 	G_IO_FLAG_IS_SEEKABLE = 16,
129 	G_IO_FLAG_MASK = 31,
130 	G_IO_FLAG_GET_MASK = 31,
131 	G_IO_FLAG_SET_MASK = 3
132 }
133 
134 struct _GIOChannel
135 {
136 	gint ref_count;
137 	GIOFuncs* funcs;
138 	gchar* encoding;
139 	GIConv read_cd;
140 	GIConv write_cd;
141 	gchar* line_term;
142 	guint line_term_len;
143 	gsize buf_size;
144 	GString* read_buf;
145 	GString* encoded_read_buf;
146 	GString* write_buf;
147 	gchar[6] partial_write_buf;
148 	guint use_buffer;
149 	guint do_encode;
150 	guint close_on_unref;
151 	guint is_readable;
152 	guint is_writeable;
153 	guint is_seekable;
154 	gpointer reserved1;
155 	gpointer reserved2;
156 }
157 
158 struct _GIOFuncs
159 {
160 	GIOStatus function (GIOChannel*, gchar*, gsize, gsize*, GError**) io_read;
161 	GIOStatus function (GIOChannel*, const(gchar)*, gsize, gsize*, GError**) io_write;
162 	GIOStatus function (GIOChannel*, gint64, GSeekType, GError**) io_seek;
163 	GIOStatus function (GIOChannel*, GError**) io_close;
164 	GSource* function (GIOChannel*, GIOCondition) io_create_watch;
165 	void function (GIOChannel*) io_free;
166 	GIOStatus function (GIOChannel*, GIOFlags, GError**) io_set_flags;
167 	GIOFlags function (GIOChannel*) io_get_flags;
168 }
169 
170 
171 
172 version(Derelict_Link_Static)
173 {
174     extern( C ) nothrow 
175     {
176         void g_io_channel_init(GIOChannel* channel);
177         GIOChannel* g_io_channel_ref(GIOChannel* channel);
178         void g_io_channel_unref(GIOChannel* channel);
179         GIOError g_io_channel_read(GIOChannel* channel, gchar* buf, gsize count, gsize* bytes_read);
180         GIOError g_io_channel_write(GIOChannel* channel, const(gchar)* buf, gsize count, gsize* bytes_written);
181         GIOError g_io_channel_seek(GIOChannel* channel, gint64 offset, GSeekType type);
182         void g_io_channel_close(GIOChannel* channel);
183         GIOStatus g_io_channel_shutdown(GIOChannel* channel, gboolean flush, GError** err);
184         guint g_io_add_watch_full(GIOChannel* channel, gint priority, GIOCondition condition, GIOFunc func, gpointer user_data, GDestroyNotify notify);
185         GSource* g_io_create_watch(GIOChannel* channel, GIOCondition condition);
186         guint g_io_add_watch(GIOChannel* channel, GIOCondition condition, GIOFunc func, gpointer user_data);
187         void g_io_channel_set_buffer_size(GIOChannel* channel, gsize size);
188         gsize g_io_channel_get_buffer_size(GIOChannel* channel);
189         GIOCondition g_io_channel_get_buffer_condition(GIOChannel* channel);
190         GIOStatus g_io_channel_set_flags(GIOChannel* channel, GIOFlags flags, GError** error);
191         GIOFlags g_io_channel_get_flags(GIOChannel* channel);
192         void g_io_channel_set_line_term(GIOChannel* channel, const(gchar)* line_term, gint length);
193         const(gchar)* g_io_channel_get_line_term(GIOChannel* channel, gint* length);
194         void g_io_channel_set_buffered(GIOChannel* channel, gboolean buffered);
195         gboolean g_io_channel_get_buffered(GIOChannel* channel);
196         GIOStatus g_io_channel_set_encoding(GIOChannel* channel, const(gchar)* encoding, GError** error);
197         const(gchar)* g_io_channel_get_encoding(GIOChannel* channel);
198         void g_io_channel_set_close_on_unref(GIOChannel* channel, gboolean do_close);
199         gboolean g_io_channel_get_close_on_unref(GIOChannel* channel);
200         GIOStatus g_io_channel_flush(GIOChannel* channel, GError** error);
201         GIOStatus g_io_channel_read_line(GIOChannel* channel, gchar** str_return, gsize* length, gsize* terminator_pos, GError** error);
202         GIOStatus g_io_channel_read_line_string(GIOChannel* channel, GString* buffer, gsize* terminator_pos, GError** error);
203         GIOStatus g_io_channel_read_to_end(GIOChannel* channel, gchar** str_return, gsize* length, GError** error);
204         GIOStatus g_io_channel_read_chars(GIOChannel* channel, gchar* buf, gsize count, gsize* bytes_read, GError** error);
205         GIOStatus g_io_channel_read_unichar(GIOChannel* channel, gunichar* thechar, GError** error);
206         GIOStatus g_io_channel_write_chars(GIOChannel* channel, const(gchar)* buf, gssize count, gsize* bytes_written, GError** error);
207         GIOStatus g_io_channel_write_unichar(GIOChannel* channel, gunichar thechar, GError** error);
208         GIOStatus g_io_channel_seek_position(GIOChannel* channel, gint64 offset, GSeekType type, GError** error);
209         GIOChannel* g_io_channel_new_file(const(gchar)* filename, const(gchar)* mode, GError** error);
210         GQuark g_io_channel_error_quark();
211         GIOChannelError g_io_channel_error_from_errno(gint en);
212         GIOChannel* g_io_channel_unix_new(int fd);
213         gint g_io_channel_unix_get_fd(GIOChannel* channel);
214         void g_io_channel_win32_make_pollfd(GIOChannel *channel, GIOCondition condition, GPollFD *fd);
215         gint g_io_channel_win32_poll(GPollFD *fds, gint n_fds, gint timeout_);
216         GIOChannel* g_io_channel_win32_new_messages(gsize hwnd);
217         GIOChannel* g_io_channel_win32_new_fd(gint fd);
218         gint g_io_channel_win32_get_fd(GIOChannel *channel);
219         GIOChannel* g_io_channel_win32_new_socket(gint socket);
220     }
221 }
222 else
223 {
224     extern( C ) nothrow 
225     {
226         alias da_g_io_channel_init = void function(GIOChannel* channel);																												
227         alias da_g_io_channel_ref = GIOChannel* function(GIOChannel* channel);																											
228         alias da_g_io_channel_unref = void function(GIOChannel* channel);																												
229         alias da_g_io_channel_read = GIOError function(GIOChannel* channel, gchar* buf, gsize count, gsize* bytes_read);																
230         alias da_g_io_channel_write = GIOError function(GIOChannel* channel, const(gchar)* buf, gsize count, gsize* bytes_written);														
231         alias da_g_io_channel_seek = GIOError function(GIOChannel* channel, gint64 offset, GSeekType type);																				
232         alias da_g_io_channel_close = void function(GIOChannel* channel);																												
233         alias da_g_io_channel_shutdown = GIOStatus function(GIOChannel* channel, gboolean flush, GError** err);																			
234         alias da_g_io_add_watch_full = guint function(GIOChannel* channel, gint priority, GIOCondition condition, GIOFunc func, gpointer user_data, GDestroyNotify notify);				
235         alias da_g_io_create_watch = GSource* function(GIOChannel* channel, GIOCondition condition);																					
236         alias da_g_io_add_watch = guint function(GIOChannel* channel, GIOCondition condition, GIOFunc func, gpointer user_data);														
237         alias da_g_io_channel_set_buffer_size = void function(GIOChannel* channel, gsize size);																							
238         alias da_g_io_channel_get_buffer_size = gsize function(GIOChannel* channel);																									
239         alias da_g_io_channel_get_buffer_condition = GIOCondition function(GIOChannel* channel);																						
240         alias da_g_io_channel_set_flags = GIOStatus function(GIOChannel* channel, GIOFlags flags, GError** error);																		
241         alias da_g_io_channel_get_flags = GIOFlags function(GIOChannel* channel);																										
242         alias da_g_io_channel_set_line_term = void function(GIOChannel* channel, const(gchar)* line_term, gint length);																	
243         alias da_g_io_channel_get_line_term = const(gchar)* function(GIOChannel* channel, gint* length);																				
244         alias da_g_io_channel_set_buffered = void function(GIOChannel* channel, gboolean buffered);																						
245         alias da_g_io_channel_get_buffered = gboolean function(GIOChannel* channel);																									
246         alias da_g_io_channel_set_encoding = GIOStatus function(GIOChannel* channel, const(gchar)* encoding, GError** error);															
247         alias da_g_io_channel_get_encoding = const(gchar)* function(GIOChannel* channel);																								
248         alias da_g_io_channel_set_close_on_unref = void function(GIOChannel* channel, gboolean do_close);																				
249         alias da_g_io_channel_get_close_on_unref = gboolean function(GIOChannel* channel);																								
250         alias da_g_io_channel_flush = GIOStatus function(GIOChannel* channel, GError** error);																							
251         alias da_g_io_channel_read_line = GIOStatus function(GIOChannel* channel, gchar** str_return, gsize* length, gsize* terminator_pos, GError** error);							
252         alias da_g_io_channel_read_line_string = GIOStatus function(GIOChannel* channel, GString* buffer, gsize* terminator_pos, GError** error);										
253         alias da_g_io_channel_read_to_end = GIOStatus function(GIOChannel* channel, gchar** str_return, gsize* length, GError** error);													
254         alias da_g_io_channel_read_chars = GIOStatus function(GIOChannel* channel, gchar* buf, gsize count, gsize* bytes_read, GError** error);											
255         alias da_g_io_channel_read_unichar = GIOStatus function(GIOChannel* channel, gunichar* thechar, GError** error);																
256         alias da_g_io_channel_write_chars = GIOStatus function(GIOChannel* channel, const(gchar)* buf, gssize count, gsize* bytes_written, GError** error);								
257         alias da_g_io_channel_write_unichar = GIOStatus function(GIOChannel* channel, gunichar thechar, GError** error);																
258         alias da_g_io_channel_seek_position = GIOStatus function(GIOChannel* channel, gint64 offset, GSeekType type, GError** error);													
259         alias da_g_io_channel_new_file = GIOChannel* function(const(gchar)* filename, const(gchar)* mode, GError** error);																
260         alias da_g_io_channel_error_quark = GQuark function();																															
261         alias da_g_io_channel_error_from_errno = GIOChannelError function(gint en);																										
262         alias da_g_io_channel_unix_new = GIOChannel* function(int fd);																													
263         alias da_g_io_channel_unix_get_fd = gint function(GIOChannel* channel);																											
264         alias da_g_io_channel_win32_make_pollfd = void function(GIOChannel *channel, GIOCondition condition, GPollFD *fd);
265         alias da_g_io_channel_win32_poll = gint function(GPollFD *fds, gint n_fds, gint timeout_);
266         alias da_g_io_channel_win32_new_messages = GIOChannel* function(gsize hwnd);
267         alias da_g_io_channel_win32_new_fd = GIOChannel* function(gint fd);
268         alias da_g_io_channel_win32_get_fd = gint function(GIOChannel *channel);
269         alias da_g_io_channel_win32_new_socket = GIOChannel* function(gint socket);
270     }
271 
272     __gshared
273     {
274         da_g_io_channel_init g_io_channel_init; 
275         da_g_io_channel_ref g_io_channel_ref; 
276         da_g_io_channel_unref g_io_channel_unref; 
277         da_g_io_channel_read g_io_channel_read; 
278         da_g_io_channel_write g_io_channel_write; 
279         da_g_io_channel_seek g_io_channel_seek; 
280         da_g_io_channel_close g_io_channel_close; 
281         da_g_io_channel_shutdown g_io_channel_shutdown; 
282         da_g_io_add_watch_full g_io_add_watch_full; 
283         da_g_io_create_watch g_io_create_watch; 
284         da_g_io_add_watch g_io_add_watch; 
285         da_g_io_channel_set_buffer_size g_io_channel_set_buffer_size; 
286         da_g_io_channel_get_buffer_size g_io_channel_get_buffer_size; 
287         da_g_io_channel_get_buffer_condition g_io_channel_get_buffer_condition; 
288         da_g_io_channel_set_flags g_io_channel_set_flags; 
289         da_g_io_channel_get_flags g_io_channel_get_flags; 
290         da_g_io_channel_set_line_term g_io_channel_set_line_term; 
291         da_g_io_channel_get_line_term g_io_channel_get_line_term; 
292         da_g_io_channel_set_buffered g_io_channel_set_buffered; 
293         da_g_io_channel_get_buffered g_io_channel_get_buffered; 
294         da_g_io_channel_set_encoding g_io_channel_set_encoding; 
295         da_g_io_channel_get_encoding g_io_channel_get_encoding; 
296         da_g_io_channel_set_close_on_unref g_io_channel_set_close_on_unref; 
297         da_g_io_channel_get_close_on_unref g_io_channel_get_close_on_unref; 
298         da_g_io_channel_flush g_io_channel_flush; 
299         da_g_io_channel_read_line g_io_channel_read_line; 	
300         da_g_io_channel_read_line_string g_io_channel_read_line_string; 
301         da_g_io_channel_read_to_end g_io_channel_read_to_end; 
302         da_g_io_channel_read_chars g_io_channel_read_chars; 
303         da_g_io_channel_read_unichar g_io_channel_read_unichar; 
304         da_g_io_channel_write_chars g_io_channel_write_chars; 
305         da_g_io_channel_write_unichar g_io_channel_write_unichar; 
306         da_g_io_channel_seek_position g_io_channel_seek_position; 
307         da_g_io_channel_new_file g_io_channel_new_file; 
308         da_g_io_channel_error_quark g_io_channel_error_quark; 
309         da_g_io_channel_error_from_errno g_io_channel_error_from_errno; 
310         da_g_io_channel_unix_new g_io_channel_unix_new; 
311         da_g_io_channel_unix_get_fd g_io_channel_unix_get_fd; 
312         da_g_io_channel_win32_make_pollfd g_io_channel_win32_make_pollfd;
313         da_g_io_channel_win32_poll g_io_channel_win32_poll;
314         da_g_io_channel_win32_new_messages g_io_channel_win32_new_messages;
315         da_g_io_channel_win32_new_fd g_io_channel_win32_new_fd;
316         da_g_io_channel_win32_get_fd g_io_channel_win32_get_fd;
317         da_g_io_channel_win32_new_socket g_io_channel_win32_new_socket;
318     }
319 }